Blockstack Dev 分享 | DID 的前世今生看这篇就够了
一块链习是首家区块链技术学习社区,提供最系统的区块链技术课程学习,定期出品有深度的技术观察 + 评论。
《 Blockstack:从开发入门到技术实战》课程训练营是由一块链习和 Blockstack 共同打造的全球第一档· Blockstack 开发中文实战课程。
每周日晚8点,作为课程内容知识拓展——助教技术分享会,由各位第一期的助教们自发轮流在线上进行分享,为学员们详细解读一个 Blockstack 技术相关内容。
昨晚,由Cdot CTO ——吴逸飞助教在直播间为大家带来第三讲「去中心化身份与Blockstack 」,内容复盘如下。
.01去中心化身份(DID)简介
.01去中心化身份(DID)简介
从登陆授权看身份系统的三个阶段
中心化身份管理
每个网站有单独的用户名与密码,同时存储了用户的相应信息。
问题:身份非常碎片化,难以管理;很多平台上重复使用同一组用户名密码,但最薄弱处容易被攻陷。
联盟中心化身份管理
使用第三方授权(如微信、Google等)登陆,一个账户就可以登陆各种应用,方便用户使用。
问题:账户与个人信息耦合;需要对中心化巨头的信任,但巨头有意无意泄露用户隐私的例子时有发生。
去中心化身份管理
优点:用户可以创建多个身份使用不同的应用;所有身份的所有权都是用户自己;敏感数据加密存储。
问题:还处于建设初期;可能面临私钥丢失等问题(可被改善)
另一个角度:身份互通
联盟中心化身份管理已经告诉我们身份互通的好处,但是还不够。每次办理签证时需要提交的资料大同小异,但是总是要重复提交。每次办理不同城市的健康码,都要重复填很多信息&不同城市的健康码互相不认。
.02W3C关于DID的规范
文档
DID草案目前还处于早期阶段,DID的文档还有很多内容没有完成。这也导致很多的实现其实只能参考这类文档,而同时要自行摸索缺失部分。
概括
DID = 为了能与DID主体进行可信的交互而将他与DID document相联系的链接。
DIDs are URLs thatrelate a DID subject to a DID document allowing trustable interactions with that subject. 任何⼈都可以有任意多的DID
如果DID在分布式账本上注册(Blockstack就是如此),那么每个人都可以是自己的身份的发行人(〜Root CA),整个系统是一个DPKI(decentralized PKI)。
DID方法指在特定的分布式账本或网络上创建、读取、更新和注销DID以及其对应的DID document的机制。
DID methods are the mechanism by which a DID and its associated DID document are created,read, updated, and deactivated on a specific distributed ledger or network
在这里可以看到当前主要的DID方法,其中did:stack:对应着Blockstack所使用的DID方法。
DID由三个部分组成
DID(URL标识符)
DID方法标识符
DID方法中所规定的标识符
而该DID指向一个DID document,比如
DID document包含了这个DID的数据,其中包括Claim(和接下来的VC相关)。
.03VC
参考Verifiable Credential的W3C规范,VC主要是用于向VC的对象提供断言。比如说学校给你颁发的毕业证,就可以VC的形式存在。
我这里讲一下并不属于DID的VC,是因为它和DID关系十分紧密。
VC全过程中包括以下几个参与方:
claim:对一个主体的断言。
credential:某人所做的一组claim。
verifiable credential :元数据、crendential和证明(例子:电子身份证)。
一个例子:
整个证明遵循如下流程:
1. 发行VC
2. 在例如数字钱包中存储VC
3. 将VC转化为验证者(verifier)verifiable presentation
4. 验证者验证verifiable presentation
而证明一般以比如JWT等形式传输,以下是一个JWT payload的例子。
.04Blockstack中的DID
W3C中对DID实现的要求
1. 全局唯一
2. 具有创建、读取、更新、注销功能
而Blockstack实现了创建全局唯一DID,以及读取(resolve系统),更新和注销DID功能的系统。
创建全局唯一DID
DID:stack + 比特币地址衍生出的标识符是全局唯一的DID。
BNS域名:直接注册到比特币,DID部分地址=比特币地址(对于p2pkh,开头的version byte=0,地址以1起头)
BNS子域名:由对应的BNS域名收集哈希batch并打包注册到比特币,DID部分地址需要加上version byte=63,所以 BNS子域名DID部分地址以S开头。
读取(resolve)部分的类比
Core下的文件,例如https://core.blockstack.org/v1/names/hildolfrx.id.blockstack 相当于DID -> DID Document
Zonfile/profile.js
有点像DID Document:
publicKey 〜 authentication 尽管publicKey并不是在根字段。
apps 〜 service 提供了能够与该用户进行交互的app列表。
最后的signature 〜 proof,对DID Document未被篡改提供的证明。
并且可以理解为用户向应用证明自己身份的VC JWT,Blockstack中登陆时的认证其实类似于提供一个VC(只不过VC 是由用户自己发行的)。
Blockstack是一个DPKI系统。
.05思考
DID的问题
DID可能会使数据形成孤岛。而实际上分散在各个个用户中的数据很难被有效运行,摩擦可能会特别高。
监管方面的难度加大,行政甚至司法成本显著提高。
对Blockstack DID的攻击
Zonfile的存储商可以在请求时返回一个过时的(但合法的)Zonfile
实现第三方认证
VC的讲解给出了第三方认证的一个框架。而Uport官方给出了一个Demo,大家可以用手机端app体验一下,思考一下Blockstack系统中如何实现第三方认证。
扫码进直播间,回看完整分享!
更多阅读:
| Blockstack Dev 讨论 | 提升 DApp 用户体验
| Blockstack Dev 周记 | 拿好DID,出发下一代互联网
| Blockstack Dev 分享 | 最详细DID身份授权流程
扫码关注公众号,回复“1”加入开发者社群